package ua.kpi.ustymenko.factory;

import ua.kpi.ustymenko.testcase.Answers;
import ua.kpi.ustymenko.testcase.Questions;
import ua.kpi.ustymenko.testcase.answer.Answer;
import ua.kpi.ustymenko.testcase.question.*;

import java.util.ArrayList;
import java.util.List;
public class HardcodedQuestionsFactory implements QuestionsFactory {
    @Override
    public Questions createQuestions() {
        List<Question> questions = new ArrayList<Question>();

        questions.add(new SingleAnswerQuestion("Дано код:\n" +
                "\tString s1 = \"string\";\n" +
                "\tString s2 = \"string\";\n" +
                "Що буде результатом (s1 == s2)?",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("true"));
                }}),
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("true"));
                    add(new Answer("false"));
                }})));
        questions.add(new YesNoQuestion("Чи можна наслідувати класи позначені як final?",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("no"));
                }})));
        questions.add(new YesNoQuestion("Чи можна змінювати стан об'єкта позначеного як final?",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("yes"));
                }})));
        questions.add(new MultipleAnswersQuestion("Оберіть допустимі назви змінних? (для JDK > 1.3)",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("tableSize"));
                    add(new Answer("$"));
                }}),
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("tableSize"));
                    add(new Answer("assert"));
                    add(new Answer("transient"));
                    add(new Answer("1string"));
                    add(new Answer("$"));
                }})));
        questions.add(new EnterableAnswersQuestion("Значення якого типу повертає метод equals?",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("boolean"));
                }})));
        questions.add(new EnterableAnswersQuestion("Яка мінімальна кількість проходів циклу do-while?",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("1"));
                }})));
        questions.add(new SingleAnswerQuestion("Скільки примітивних типів в Java?",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("8"));
                }}),
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("4"));
                    add(new Answer("6"));
                    add(new Answer("8"));
                    add(new Answer("Залежить від JVM"));
                }})));
        questions.add(new SingleAnswerQuestion("Оберіть коректну назву класу.",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("Finder"));
                }}),
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("Searching"));
                    add(new Answer("Finder"));
                    add(new Answer("finder"));
                    add(new Answer("Немає коректних"));
                }})));
        questions.add(new YesNoQuestion("Чи допустимий запис\n" +
                "\tfor (i : array) {}\n" +
                "якщо змінні i та array визначені раніше (де array - коректно ініціалізований масив)?",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("no"));
                }})));
        questions.add(new SingleAnswerQuestion("Скільки інтерфейсів може розширювати (extend) інший інтерфейс?",
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("Безліч"));
                }}),
                new Answers(new ArrayList<Answer>() {{
                    add(new Answer("1"));
                    add(new Answer("0"));
                    add(new Answer("Безліч"));
                }})));

        return new Questions(questions);
    }
}
